#include<stdio.h>
#define N 200010

int n,m;
int f[N];

struct Edge
{
	int a,b,w;
} edge[N];

void quick_sort(struct Edge *edge,int l,int r)
{
	if(l>=r)
	{
		return;
	}
	int i=l-1,j=r+1,x=edge[(l+r)/2].w ;
	while(i<j)
	{
		do
		{
			i++;
		}while(edge[i].w < x);
		do
		{
			j--;
		}while(edge[j].w > x);
		if(i<j)
		{
			struct Edge tmp=edge[i];
			edge[i]=edge[j];
			edge[j]=tmp;
		}
	}
	quick_sort(edge,l,j);
	quick_sort(edge,j+1,r);
}

int find(int u)
{
	if(f[u]!=u)
	{
		f[u]=find(f[u]);
	}
	return f[u];
}

int main()
{
	scanf("%d%d",&n,&m);
	
	for(int i=0;i<m;i++)
	{
		int a,b,w;
		scanf("%d%d%d",&a,&b,&w);
		edge[i].a =a;
		edge[i].b =b;
		edge[i].w =w;
	}
	
	for(int i=1;i<=n;i++)
	{
		f[i]=i;
		//printf("%d\n",f[i]);
	}
	
	quick_sort(edge,0,m-1);
	
	int sum=0,cnt=0;
	
	for(int i=0;i<m;i++)
	{
		int a=edge[i].a ,b=edge[i].b ,w=edge[i].w ;
		a=find(a);
		b=find(b);
		//printf("a=%d b=%d w=%d x=%d y=%d\n",a,b,w,x,y);
		
		if(a!=b)
		{
			f[a]=b;
			sum+=w;
			cnt++; 
		}
	}
	
	if(cnt<n-1)
	{
		printf("impossible\n");
	}
	else
	{
		printf("%d\n",sum);
	}
	
	return 0;
}
